iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0

目標:能安全地開分支、切換、合併,並處理衝突。

核心概念:

  • Commit:每一次提交就是一個節點。
  • Branch:是一個指標,指向某個commit。
  • HEAD:你目前所在位置,通常指向某個分支。

建立與切換分支

git branch feature/login     建立分支
git switch feature/login     切換(新指令推薦)
git switch -c feature/signup 同時建立+切換
git branch -v                查看分支

未拆分前的git checkout

git checkout <commit_id> 切換到特定版本
git checkout master      切換回主線

合併(merge)

  • Fast-forward:
    目標分支落後,可直接把指標快轉到最新commit,不會產生新的commit節點

  • Three-way merge:
    雙方分支都有新提交,同時比較main與feature的差異,最後合併一個新的commit。

    git switch main          回到主線
    git merge feature/login  合併工作分支
    

Fast-forward:

  • 把 feature 合併回 main ,結果就是直接把main指向E,沒有新增commit

    A---B---C (main)
             \
              D---E (feature)
    

Three-way merge:

範例:

  A---B---C (main)
           \
            D---E (feature)

如果 main 後來又新增了 F:

A---B---C---F (main)
        \
         D---E (feature)

這時候要合併 feature → main,就需要 Git 進行 三方比較:

  • 共同祖先(common ancestor):C
  • main 最新分支:F
  • feature 最新分支:E
  • 產生新的合併節點:M
 A---B---C---F------M (main) //M就是新的合併commit節點
         \        /          //它同時有兩個父節點(E和F)
          D------E(feature)

若有衝突:

編輯檔案 -> 標記解決 -> 提交

git add .               
git commit -m "merge: resolve conflicts between main and feature/login"

merge vs rebase(何時用?)

  • merge:保留分支歷史,適合多人協作主線。
  • rebase:把你的分支「重接」到最新主線,歷史更線性。
    • 建議僅在尚未推送到遠端的私人分支使用(避免改寫他人基礎)。

在 feature 分支上讓它接到最新 main

git switch feature/login
git fetch origin
git rebase origin/main

若有衝突

逐檔解決後:

git rebase --continue

清理分支

git branch -d feature/login  //合併後刪本地分支
git push origin --delete feature/login  //刪遠端分支

歷史瀏覽小技巧

git log --oneline --graph --decorate --all
  • 看到所有分支走向,非常適合在多人專案裡檢視歷史

參考資料


上一篇
Day18|Git 版本控制基礎
下一篇
Day20|Jest 測試入門
系列文
程式小白的 30 天轉職挑戰24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言